昨天我們先搞懂一件事情:
明明已經知道對方的 IP,為什麼還需要 MAC?
因為資料真的從網路卡送出去時,會被包成 Ethernet Frame。
除了 Destination IP 之外,還會需要:
Destination MAC
如果對方跟我們在同一個網段,事情比較簡單。
例如:
PC A
192.168.1.10/24
PC B
192.168.1.20/24
PC A 算出 PC B 跟自己都在:
192.168.1.0/24
所以它可以直接用 ARP 找 PC B 的 MAC,然後把 Frame 交給 Switch,再送到 PC B。
但如果目的地根本不在同一個網段呢?
今天就從這裡開始。
這次不要只看 PC A 和目的地。
先把中間會經過的設備一起畫出來:
PC A
192.168.1.10/24
│
▼
Switch A
│
▼
Router
192.168.1.1 / 192.168.2.1
│
▼
Switch B
│
▼
PC B
192.168.2.20/24
PC A 想把資料送給:
192.168.2.20
現在就沿著這張圖,一步一步看資料到底怎麼走。
PC A 自己是:
192.168.1.10/24
目的地是:
192.168.2.20/24
PC A 先利用 Subnet Mask 判斷 Network。
自己的 Network:
192.168.1.0/24
目的地的 Network:
192.168.2.0/24
不一樣。
所以 PC A 知道:
192.168.2.20
不在本地 LAN
這時它不會直接去找 192.168.2.20 的 MAC。
因為 ARP 只能在目前這個 Layer 2 網路裡找人。
PC A 現在真正需要知道的是:
如果目的地不在本地網段,我要先把資料交給誰?
答案就是 Default Gateway。
假設 PC A 的網路設定是:
IP Address: 192.168.1.10
Subnet Mask: 255.255.255.0
Default Gateway: 192.168.1.1
這裡的 Default Gateway 就是 Router 在 PC A 這一側的介面。
所以 PC A 的判斷會變成:
目的地 192.168.2.20
不在本地網段
↓
先交給 192.168.1.1
Default Gateway
注意一件很重要的事:
「先交給 Router」不代表真正目的地變成 Router。
真正的目的地還是:
192.168.2.20
Router 只是這趟旅程的第一個出口。
問題又來了。
PC A 現在知道第一站要交給:
192.168.1.1
但 Ethernet Frame 需要的是 MAC Address。
所以 PC A 會 ARP:
Who has 192.168.1.1?
Router 回覆:
192.168.1.1 is at
BB:BB:BB:BB:BB:BB
這時 PC A 才拿到這一跳真正需要的 Destination MAC。
假設現在是:
PC A
IP:
192.168.1.10
MAC:
AA:AA:AA:AA:AA:AA
Router:
IP:
192.168.1.1
MAC:
BB:BB:BB:BB:BB:BB
最終目的地:
PC B
IP:
192.168.2.20
PC A 裡面的 IP Packet 會是:
Source IP = 192.168.1.10
Destination IP = 192.168.2.20
外面的 Ethernet Frame 則會是:
Source MAC = AA:AA:AA:AA:AA:AA
Destination MAC = BB:BB:BB:BB:BB:BB
也就是:
Destination IP
=
最終真正要去的地方
Destination MAC
=
目前這一跳要交給誰
這是今天最重要的一組觀念。
現在 PC A 已經把資料準備好了。
路徑是:
PC A
↓
Switch A
↓
Router
所以 Frame 從 PC A 離開之後,第一個碰到的設備其實是 Switch A。
Switch A 不需要判斷:
192.168.2.20 在哪?
它只要看 Ethernet Frame 裡的:
Destination MAC
=
BB:BB:BB:BB:BB:BB
然後查自己的 MAC Address Table。
例如:
MAC Port
AA:AA:AA:AA:AA:AA Fa0/1
BB:BB:BB:BB:BB:BB Fa0/24
Switch 一看就知道:
BB:BB:BB:BB:BB:BB
在 Fa0/24
所以它把 Frame 從 Fa0/24 送出去。
下一站就是 Router。
現在資料走到:
PC A
↓
Switch A
↓
Router
Router 收到的 Ethernet Frame 是:
Source MAC = PC A 的 MAC
Destination MAC = Router 的 MAC
這表示:
這一跳的 Frame 的確是送給 Router 的。
Router 收到後,會先處理 Layer 2 的 Ethernet Header。
接著往裡面看 IP Packet:
Source IP = 192.168.1.10
Destination IP = 192.168.2.20
這時 Router 才開始處理 Layer 3 的問題:
192.168.2.20 要往哪一邊送?
答案會來自:
Routing Table
Routing Table 怎麼看、Next Hop 是什麼,就留到 Day 05。
走完前面的流程後,這兩台設備的角色就比較清楚了。
Switch 主要看:
MAC Address
它處理的是目前這個 LAN 裡面:
這個 Frame 應該從哪個 Port 送出去?
所以剛剛 Switch A 做的事情只是:
看到 Router 的 MAC
↓
查 MAC Address Table
↓
送去 Router 所在的 Port
Router 主要看:
IP Address
它要處理的是:
這個封包要前往哪一個 Network?
所以資料到了 Router 之後,才開始進入真正的路由問題。
可以先粗略記成:
Switch
→ 在同一個 LAN 裡送 Frame
Router
→ 在不同 Network 之間送 Packet
這裡再多看一步。
Router 收到 PC A 傳來的 Frame:
Source MAC = PC A
Destination MAC = Router
不會把這個 Ethernet Frame 原封不動繼續往後送。
因為這組 MAC 只適用於:
PC A
↓
Router
Router 如果要往下一段網路送,就要重新建立新的 Layer 2 Header。
例如:
Router
↓
下一台設備
新的 Frame 可能變成:
Source MAC = Router 出口介面的 MAC
Destination MAC = 下一跳設備的 MAC
所以可以先記:
IP
→ 描述端到端的目的地
MAC
→ 描述目前這一段 Layer 2 鏈路
先不考慮 NAT 等會改寫 IP 的特殊情況,Destination IP 仍然會指向:
192.168.2.20
但 MAC Address 會隨著不同的 Layer 2 鏈路重新建立。
現在再把整條路看一次:
PC A
192.168.1.10
│
│ ① 發現 192.168.2.20 不同網段
│
│ ② ARP 找到 Gateway 的 MAC
│
▼
Switch A
│
│ ③ 看 Destination MAC
│ ④ 找到 Router 所在 Port
│
▼
Router
│
│ ⑤ 拆掉這一段 Ethernet Header
│ ⑥ 看 Destination IP
│ ⑦ 查 Routing Table
│
▼
下一個 Network
所以 PC A 在送資料時,其實同時有兩個目的地概念:
最終目的地
=
192.168.2.20
這一跳的目的地
=
Default Gateway
對應到封包裡就是:
Destination IP
=
192.168.2.20
Destination MAC
=
Router 的 MAC
把 Day 03 和 Day 04 放在一起看:
PC A
想找 PC B
↓
判斷同網段
↓
ARP 找 PC B 的 MAC
↓
Switch
↓
PC B
PC A
想找遠端主機
↓
判斷不同網段
↓
ARP 找 Default Gateway 的 MAC
↓
Switch
↓
Router
↓
其他 Network
真正的差異不是「有沒有 Switch」。
兩種情況都可能會經過 Switch。
差別在於:
PC A 最後決定要把這一跳的 Frame 交給誰?
同網段:
交給目的地主機
不同網段:
交給 Default Gateway
以前看到:
IP Address
Subnet Mask
Default Gateway
很容易只把它們當成網路設定裡要填的三個欄位。
現在可以把它們串成一套真的會執行的判斷:
IP Address
→ 我是誰
Subnet Mask
→ 哪些 IP 算跟我同網段
Default Gateway
→ 如果目的地不在本地,先交給誰
接著:
ARP
→ 找到這一跳需要的 MAC
然後:
Switch
→ 根據 Destination MAC,把 Frame 送到正確 Port
最後:
Router
→ 根據 Destination IP,決定下一個 Network 怎麼走
這樣 Default Gateway、ARP、Switch、Router 就不再是四個分開背的名詞。
它們其實是在同一條資料傳輸流程裡,一個接一個出現。
今天先收斂成四句:
同網段 → ARP 找目的地主機
不同網段 → ARP 找 Default Gateway
Destination IP → 最終目的地
Destination MAC → 目前這一跳要交給誰
再加上一條設備分工:
Switch 看 MAC
Router 看 IP
當然真實網路設備還有更多功能,但先把這個主幹抓住,就已經可以把資料一路追到 Router。